package com.barney.support.jpa;

import java.util.Date;

import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;

import com.barney.support.domain.HasUpdatedDate;

/**
 * 수정일시를 설정하는 엔티티 리스너. 엔티티에서는 아래와 같이 설정하면 수정일시가 자동으로 설정된다.
 *
 * <blockquote>
 *
 * <pre>
 * &#064;Entity
 * &#064;EntityListeners(UpdatedDateListener.class)
 * pubic class Entity implements Serializable, HasUpdatedDate {
 * ...
 * }
 * </pre>
 *
 * </blockquote>
 *
 * @see HasUpdatedDate
 */
public class UpdatedDateListener {

	/**
	 * 수정일시가 <code>null</code>일 때만 설정한다.
	 */
	@PrePersist
	public void prePersist(Object obj) {
		if (obj instanceof HasUpdatedDate) {
			HasUpdatedDate hud = (HasUpdatedDate) obj;
			if (hud.getUpdatedDate() == null) {
				hud.setUpdatedDate(new Date());
			}
		}
	}

	@PreUpdate
	public void preUpdate(HasUpdatedDate obj) {
		obj.setUpdatedDate(new Date());
	}
}
